<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
    // 模拟JS阻塞
    function sleep(d){
        let t = Date.now();
        while(Date.now() - t <= d);
    }

    // 模拟请求接口拿到返回的时间
    function request() {
        sleep(2000)
        return {
            data: 'Hello World'
        }
    }

    // console.log(request().data);

    // new Promise((resolve, reject) => {
    //     setTimeout(() => {
    //         resolve()
    //     }, 1000)
    //
    // }).then(() => {
    //     console.log('Hello World');
    //     console.log('Hello World');
    //     console.log('Hello World');
    //     console.log('Hello World');
    //
    //     return new Promise((resolve, reject) => {
    //         setTimeout(() => {
    //             resolve()
    //         }, 1000)
    //     })
    // }).then(() => {
    //     console.log('Hello VueJs');
    //     console.log('Hello VueJs');
    //     console.log('Hello VueJs');
    //     console.log('Hello VueJs');
    //
    //     return new Promise((resolve, reject) => {
    //         setTimeout(() => {
    //             resolve()
    //         }, 1000)
    //     })
    // }).then(() => {
    //     console.log('Hello JAVA');
    //     console.log('Hello JAVA');
    //     console.log('Hello JAVA');
    //     console.log('Hello JAVA');
    // })

    // 什么情况下会用到Promise
    // 一般情况下有异步操作时,使用Promise对这个异步操作进行封装
    // 在执行传入的回调函数时，会传入两个参数 resolve, reject，本身他们两个又是函数
     new Promise((resolve, reject) => {
         setTimeout(() => {
             // 成功
             // resolve('Hello World')
             // 失败
             reject('error message')
         }, 1000)
     }).then((data) => {
         console.log(data)
     }).catch((err) => {
         console.log(err)
     })


</script>
</body>
</html>